using System.Collections.Generic;

namespace OhioState.Graphics
{
    /// <summary>
    /// Represents a layer. A layer contains a (potentially empty)
    /// list of <see cref="IDrawable"/>s to render.
    /// </summary>
    public interface ILayer
    {
        /// <summary>
        /// Get or set a material for the layer.
        /// </summary>        
        IMaterial Material { get; set; }

        /// <summary>
        /// Get or set whether the layer is active or not.
        /// </summary>
        bool Active { get; set; }
        
        /// <summary>
        /// Get or set the layer's camera.
        /// </summary>
        ICamera Camera { get;  set;}

        /// <summary>
        /// Get the list of drawables.
        /// </summary>
        List<IDrawable> Drawables { get; }

        /// <summary>
        /// Get or set the Frame Buffer Object (Render Targets) for the Layer.
        /// </summary>
        IFrameBufferObject FrameBuffer { get; set; }

        /// <summary>
        /// Render the layer.
        /// </summary>
        /// <param name="panel">Render the layer to the 
        /// specified render panel.</param>
        void Render(IRenderPanel panel);
    }
}
